/*
# Copyright (C) 2024 HiHope Open Source Organization .
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
 */
//这段代码是一个头文件（SLE_OLED_SERVER_ADV.H），定义了与SLE（可能是某种低功耗蓝牙协议）广播相关的数据结构、枚举类型和初始化函数。
/**
 * @defgroup
 * @ingroup
 * @{
 */

#ifndef SLE_OLED_SERVER_ADV_H
#define SLE_OLED_SERVER_ADV_H
//使用 @if Eng 和 @else 提供中英文双语的注释，增强代码可读性。
/**
 * @if Eng
 * @brief Definitaion of BLE ADV 通用广播结构.
 * @else
 * @brief SLE 广播普通数据结构。
 * @endif
 */
//广播通用数据结构
struct sle_adv_common_value {
    uint8_t length;  // 数据长度
    uint8_t type;    // 数据类型
    uint8_t value;   // 数据值
};

// 用途：表示广播数据的基本结构，包含长度、类型和值。
// 字段解析：
// length：广播数据的长度。
// type：广播数据的类型（如设备名称、服务UUID等）。
// value：广播数据的具体内容。

/**
 * @if Eng
 * @brief Definitaion of BLE ADV Channel mapping.
 * @else
 * @brief SLE 广播信道映射。
 * @endif
 */
//广播信道映射枚举
typedef enum {
    SLE_ADV_CHANNEL_MAP_77 = 0x01,   // 信道77
    SLE_ADV_CHANNEL_MAP_78 = 0x02,   // 信道78
    SLE_ADV_CHANNEL_MAP_79 = 0x04,   // 信道79
    SLE_ADV_CHANNEL_MAP_DEFAULT = 0x07 // 默认信道（77、78、79）
} sle_adv_channel_map;
// 用途：定义广播使用的信道映射。
// 字段解析：
// 每个枚举值对应一个信道（77、78、79）或默认信道组合。
/**
 * @if Eng
 * @brief Definitaion of SLE ADV Data Type.
 * @else
 * @brief SLE 广播数据类型
 * @endif
 */
//广播数据类型枚举
typedef enum {
    SLE_ADV_DATA_TYPE_DISCOVERY_LEVEL = 0x01,                         /*!< 发现等级 */
    SLE_ADV_DATA_TYPE_ACCESS_MODE = 0x02,                             /*!< 接入层能力 */
    SLE_ADV_DATA_TYPE_SERVICE_DATA_16BIT_UUID = 0x03,                 /*!< 标准服务数据信息 */
    SLE_ADV_DATA_TYPE_SERVICE_DATA_128BIT_UUID = 0x04,                /*!< 自定义服务数据信息 */
    SLE_ADV_DATA_TYPE_COMPLETE_LIST_OF_16BIT_SERVICE_UUIDS = 0x05,    /*!< 完整标准服务标识列表 */
    SLE_ADV_DATA_TYPE_COMPLETE_LIST_OF_128BIT_SERVICE_UUIDS = 0x06,   /*!< 完整自定义服务标识列表 */
    SLE_ADV_DATA_TYPE_INCOMPLETE_LIST_OF_16BIT_SERVICE_UUIDS = 0x07,  /*!< 部分标准服务标识列表 */
    SLE_ADV_DATA_TYPE_INCOMPLETE_LIST_OF_128BIT_SERVICE_UUIDS = 0x08, /*!< 部分自定义服务标识列表 */
    SLE_ADV_DATA_TYPE_SERVICE_STRUCTURE_HASH_VALUE = 0x09,            /*!< 服务结构散列值 */
    SLE_ADV_DATA_TYPE_SHORTENED_LOCAL_NAME = 0x0A,                    /*!< 设备缩写本地名称 */
    SLE_ADV_DATA_TYPE_COMPLETE_LOCAL_NAME = 0x0B,                     /*!< 设备完整本地名称 */
    SLE_ADV_DATA_TYPE_TX_POWER_LEVEL = 0x0C,                          /*!< 广播发送功率 */
    SLE_ADV_DATA_TYPE_SLB_COMMUNICATION_DOMAIN = 0x0D,                /*!< SLB通信域域名 */
    SLE_ADV_DATA_TYPE_SLB_MEDIA_ACCESS_LAYER_ID = 0x0E,               /*!< SLB媒体接入层标识 */
    SLE_ADV_DATA_TYPE_EXTENDED = 0xFE,                                /*!< 数据类型扩展 */
    SLE_ADV_DATA_TYPE_MANUFACTURER_SPECIFIC_DATA = 0xFF               /*!< 厂商自定义信息 */
} sle_adv_data_type;

// 用途：定义广播数据的类型，涵盖标准服务、设备名称、功率等级等。
// 字段解析：
// 包括发现等级、服务UUID、设备名称、功率等级等广播数据类型。
// 0xFF 保留给厂商自定义数据。
/**
 * @if Eng
 * @brief  sle adv config and announce.
 * @attention  NULL
 * @retval ERRCODE_SLE_SUCCESS    Excute successfully
 * @retval ERRCODE_SLE_FAIL       Execute fail
 * @par Dependency:
 * @li NULL
 * @else
 * @brief  sle广播配置和公开。
 * @attention  NULL
 * @retval ERRCODE_SLE_SUCCESS    执行成功
 * @retval ERRCODE_SLE_FAIL       执行失败
 * @par 依赖:
 * @li NULL
 * @endif
 */
//广播初始化函数
errcode_t example_sle_server_adv_init(void);
#endif



// 广播配置
// 使用 struct sle_adv_common_value 配置广播数据的内容。
// 使用 sle_adv_channel_map 选择广播信道。
// 使用 sle_adv_data_type 指定广播数据的类型。
// 广播初始化
// 调用 example_sle_server_adv_init 启动广播功能。